home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 1996 #5
/
Amiga Plus CD - 1996 - No. 5.iso
/
pd
/
grafik
/
batchconverter
/
batchconverter.rexx
< prev
next >
Wrap
OS/2 REXX Batch file
|
1996-05-28
|
15KB
|
523 lines
/* changed getstring to get number. */
/*
** Batchconverter.rexx
**
** $VER Batchconverter.rexx 1.0 (27 May 1996)
**
** ©1996 Ramiro Garcia
**
** This program allows the user to select via requesters:
**
** A source directory full of pictures to batch process,
** A destination directory to put them in,
** and IFF, IFF-HAM, GIF, or JPEG output formats.
**
** There are also options to control the number of colors
** in the output IFFs, and the picture quality/compression
** of the JPEGs.
**
**
*/
/*******************************************************************/
/* Here we set the default number of colors to render in, */
/* default Vertical Resolution, and other important parameters */
/*******************************************************************/
NUMBER_OF_COLORS=256
HALVE=NO
INTERLACED=2
NONINTERLACED=0
JPQUAL=32
VRES = INTERLACED
TELLRES="NonInterlaced"
BITBUCKET=0
NL = '0A'X
SQ = '27'X
DQ = '22'X
TRUE = 1
FALSE = 0
HIGHLIGHT_ON ='1B'X||'[0;43;32m'
HIGHLIGHT_OFF ='1B'X||'[0;40;31m'
SYSTEM_ALERT='07'x
options results
/* trace all */
/*******************************************************************/
/* Find ADPro's AREXX port, start ADPro otherwise. */
/* You must have "ADPro:" assigned, or ADPro already running */
/*******************************************************************/
SAY " " HIGHLIGHT_ON "If you clicked on the icon" HIGHLIGHT_OFF
SAY " " HIGHLIGHT_ON "to run BatchIFF, you can" HIGHLIGHT_OFF
SAY " " HIGHLIGHT_ON "drag this window down to" HIGHLIGHT_OFF
SAY " " HIGHLIGHT_ON "See some useful messages." HIGHLIGHT_OFF
say ""
ADDRESS COMMAND "C:wait 2 secs"
IF ~SHOW('P','ADPro') THEN DO
ADDRESS COMMAND "run < nil: > nil: adpro:adpro MAXMEM=4500000 MINIMIZED LISTINTERFACE NL NS"
/* Wait up to 30 secs (10 seconds each line) for ADPro to appear. */
ADDRESS COMMAND "WAITFORPORT ADPro"
ADDRESS COMMAND "WAITFORPORT ADPro"
ADDRESS COMMAND "WAITFORPORT ADPro"
END
ELSE DO
address 'ADPro'
INTERFACE_SIZE TINY
SET_ADPRO_PUBLIC
IF ADPRO_RESULT~="Workbench" THEN SET_ADPRO_PUBLIC Workbench
say ADPRO_RESULT
END
IF ~SHOW('P','ADPro') THEN DO
SAY "Could not locate ADPro."
Call Exit_Routine
END
address 'ADPro'
version
say "ADPro Version="HIGHLIGHT_ON ADPRO_RESULT HIGHLIGHT_OFF
say "Version must be "HIGHLIGHT_ON "2.5.0 "HIGHLIGHT_OFF "or greater."
/*******************************************************************/
/* Select IFF, IFF-HAM, GIF, or JPEG */
/*******************************************************************/
SAY "Please select IFF, HAM, GIF, or JPEG for your output pictures."
/*OKAYN Title Text GadgetLabels */
OKAYN '"Output Picture Format"' '"Select the output picture format"',
"IFF|IFF-HAM|GIF|JPEG"
IF (RC=0) THEN DO
SAVETYPE=JPEG
Call JPEG_Quality
END
IF (RC=1) THEN DO
SAVETYPE=IFF
Call How_Many_Colors
Call Interlace_mode
END
IF (RC=2) THEN DO
SAVETYPE=IFF
NUMBER_OF_COLORS=HAM
say "The output pictures will be rendered with a "HIGHLIGHT_ON" 4096 color, HAM "HIGHLIGHT_OFF" palette."
Call Halve_Horizontal
Call Interlace_mode
END
IF (RC=3) THEN DO
SAVETYPE=GIF
NUMBER_OF_COLORS=256
END
IF (RC>3) THEN Say "A problem has occurred while choosing the file type."
say "The output pictures will be saved as "HIGHLIGHT_ON SAVETYPE HIGHLIGHT_OFF" pictures."
/*******************************************************************/
/*Select the source directory, with the pictures to be processed. */
/*******************************************************************/
PARSE ARG Arguments
PARSE VAR Arguments '"'Title'"' '"'DefaultDir'"' IsRequired
SAY "Please select the directory with the pictures to be processed."
Title = DQ || "Please select the directory with the source pictures." || DQ
/* DefaultDir = DQ || DefaultDir || DQ */
DefaultDir = DQ DQ
IsRequired = TRUE
continue = TRUE
DO WHILE (continue = TRUE)
ADPRO_TO_FRONT
GETDIR Title DefaultDir
EnteredDir = ADPRO_RESULT
IF (RC ~= 0) THEN DO
IF (IsRequired = TRUE) THEN DO
ADPRO_TO_FRONT
OKAYN '"GetADir"' '"This value is required."' '"Retry|Cancel"'
IF (RC = 0) THEN DO
EnteredDir = DQ || DQ
continue = FALSE
END
END
ELSE DO
EnteredDir = DQ || DQ
continue = FALSE
END
END
ELSE
continue = FALSE
END
/* If the user has clicked on the "Cancel" button, or */
/* If the user has clicked on "OK" without selecting anything, then: */
IF ((EnteredDir = DQ || DQ)|(EnteredDir = '')) THEN DO
SAY "You need to select a source directory."
Call Exit_Routine
END
Call Check_directory_format
SourceDirectory = EnteredDir
ADPRO_TO_FRONT
/*******************************************************************/
/* Select a destination directory for the processed pictures. */
/*******************************************************************/
PARSE ARG Arguments
PARSE VAR Arguments '"'Title'"' '"'DefaultDir'"' IsRequired
SAY "Please select a different directory for the finished pictures."
Title = DQ || "Select a different directory to place the processed pictures." || DQ
/* Force the ASL requester to display available volumes. */
DefaultDir = DQ DQ
IsRequired = TRUE
continue = TRUE
DO WHILE (continue = TRUE)
ADPRO_TO_FRONT
GETDIR Title DefaultDir
EnteredDir = ADPRO_RESULT
IF (RC ~= 0) THEN DO
IF (IsRequired = TRUE) THEN DO
ADPRO_TO_FRONT
OKAYN '"GetADir"' '"This value is required."' '"Retry|Cancel"'
IF (RC = 0) THEN DO
EnteredDir = DQ || DQ
continue = FALSE
END
END
ELSE DO
EnteredDir = DQ || DQ
continue = FALSE
END
END
ELSE
continue = FALSE
END
/**
** If the user has clicked on the "Cancel" button, or
** If the user has clicked on the "OK" button
** without selecting anything, then:
**/
IF ((EnteredDir = DQ || DQ)|(EnteredDir = '')) THEN DO
SAY "You need to select a destination directory."
Call Exit_Routine
END
Call Check_directory_format
DestinationDirectory = EnteredDir
/* Now we have a place to put the pictures. */
/* Keep source and destination directories separate. */
If (DestinationDirectory = SourceDirectory) THEN DO
SAY ""
SAY "The destination directory must be different from the source directory."
say "Please put the processed pictures someplace other than "HIGHLIGHT_ON SourceDirectory HIGHLIGHT_OFF""
Call Exit_Routine
END
/*******************************************************************/
/* Tell the user what we are about to do, and */
/* Give the user a last chance to bail out */
/*******************************************************************/
/* ADDRESS COMMAND 'ECHO "We will process the following pictures in the *E[0m*E[43;32m'SourceDirectory'*E[0m*E[40;31m directory:"' */
say "We will process the following pictures in the "HIGHLIGHT_ON SourceDirectory HIGHLIGHT_OFF" directory:"
/* Enable highlighting */
say ""HIGHLIGHT_ON
ADDRESS COMMAND 'dir 'DQ||SourceDirectory||"~(pic.list)"||DQ' FILES'
/* Disable highlighting */
say HIGHLIGHT_OFF""
ADDRESS COMMAND 'list TO T:pic.list 'DQ||SourceDirectory||DQ' P=~(#?.info|pic.list) NOHEAD FILES QUICK'
say "And place the processed pictures in the "HIGHLIGHT_ON DestinationDirectory HIGHLIGHT_OFF" directory."
OKAYN '"Ready to Process Pictures"' '"Do you wish to proceed?"' '"Yes|No"'
IF (RC = 0) THEN Call Exit_Routine
SAY "Hold on to your Pixels!"
/*******************************************************************/
/* Read the list of files, load them, process them, and save them. */
/*******************************************************************/
/* Read the list */
PIC_LIST = "t:pic.list"
if OPEN('in' , PIC_LIST , 'r') ~= 1 then do
okay1 "Could Not Open" PIC_LIST
Call Exit_Routine
end
/* Load the files */
AVAIL_MODES_ONLY OFF /* This allows us to render AGA pics on ECS machine */
in_file = READLN('in')
/* Test to see if we can touch the first file on the list */
IF ~(OPEN('canaryfile',SourceDirectory||in_file,'R')=1) THEN DO
SAY "I tried to open "SourceDirectory||in_file
okay1 "Could Not Open" SourceDirectory||in_file
Call Exit_Routine
END
BITBUCKET=CLOSE('canaryfile')
/* Try to load the first file on the list into ADPro */
do while in_file ~= ""
lformat "UNIVERSAL"
load DQ||SourceDirectory||in_file||DQ
if RC ~= 0 then do
okay1 "Could Not Load" SourceDirectory||in_file
Call Exit_Routine
end
/* Process and save the pictures */
SFORMAT SAVETYPE
IF (SAVETYPE=JPEG) THEN DO
save DQ||DestinationDirectory||in_file||DQ "RAW" JPQUAL
END
ELSE DO
screen_type VRES
render_type NUMBER_OF_COLORS
dither 1
IF (HALVE=YES) THEN PCT_SCALE 50 100
execute
save DQ||DestinationDirectory||in_file||DQ "IMAGE"
END
in_file = READLN('in')
end
say SYSTEM_ALERT
say HIGHLIGHT_ON "All Done!" HIGHLIGHT_OFF
okay1 "All Done!"
Call Exit_Routine
/*******************************************************************/
/* Select the JPEG Quality for the saved pictures. */
/*******************************************************************/
JPEG_Quality:
SAY "Please select the the JPEG quality for your output pictures."
SAY "Higher=Better."
/*GETNUMBER Title Default Min Max */
GETNUMBER '"Select the JPEG Quality"' JPQUAL 2 1000
IF RC~=0 THEN Call Exit_Routine
JQUAL=ADPRO_RESULT
say "The output pictures will have a "HIGHLIGHT_ON JPQUAL HIGHLIGHT_OFF" JPEG Quality."
RETURN
/*******************************************************************/
/* Select the number of colors for the output pictures. */
/*******************************************************************/
How_Many_Colors:
SAY "Please select the number of colors for your output pictures."
GETNUMBER '"Enter 2, 4, 8, 16, 32, 64, 128, or 256 Colors"' NUMBER_OF_COLORS
IF RC~=0 THEN Call Exit_Routine
NUMBER_OF_COLORS=ADPRO_RESULT
IF ~((NUMBER_OF_COLORS= 2)|(NUMBER_OF_COLORS= 4)|(NUMBER_OF_COLORS= 8)|,
(NUMBER_OF_COLORS= 16)|(NUMBER_OF_COLORS= 32)|(NUMBER_OF_COLORS= 64)|,
(NUMBER_OF_COLORS=128)|(NUMBER_OF_COLORS= 256)|(NUMBER_OF_COLORS=EHB)|,
(NUMBER_OF_COLORS=HAM)|(NUMBER_OF_COLORS=HAM8)) THEN DO
SAY "You must enter only one of the following:"
SAY "2 4 8 16 32 64 18 256"
SAY "EHB HAM HAM8"
SAY "With no leading spaces"
SAY "You picked "HIGHLIGHT_ON NUMBER_OF_COLORS HIGHLIGHT_OFF
address command 'wait 6 secs'
Call Exit_Routine
END
say "The output pictures will be rendered in "HIGHLIGHT_ON NUMBER_OF_COLORS HIGHLIGHT_OFF" colors."
RETURN
/*******************************************************************/
/* Select Interlace or NonInterlaced Vertical Resolution */
/*******************************************************************/
Interlace_mode:
SAY "Please select Interlaced or NonInterlaced for your output pictures."
/*OKAYN Title Text GadgetLabels */
OKAYN '"Interlaced or NonInterlaced?"' '"Select your vertical resolution"',
"Interlaced|NonInterlaced"
IF (RC=0) THEN DO
VRES=NONINTERLACED
TELLRES="NonInterlaced"
END
ELSE DO
VRES=INTERLACED
TELLRES="Interlaced"
END
say "The output pictures will be rendered in "HIGHLIGHT_ON TELLRES HIGHLIGHT_OFF" mode."
RETURN
/*******************************************************************/
/* Squeeze the pictures in half horizontally? */
/*******************************************************************/
Halve_Horizontal:
TELLSQUEEZE="not be"
SAY "Would you like the output pictures halved in width?"
/*OKAYN Title Text GadgetLabels */
OKAYN '"Halve Width?"' '"Shrink the pictures in half horizontally?"',
"Shrink|Don't_Shrink"
IF ~(RC=0) THEN DO
HALVE=YES
TELLSQUEEZE="be"
END
say "The output pictures will "HIGHLIGHT_ON TELLSQUEEZE HIGHLIGHT_OFF" halved."
RETURN
/*******************************************************************/
/* Check for :t, t, ram:t, ram:t/, and process accordingly */
/*******************************************************************/
Check_directory_format:
If (index(EnteredDir,':')=0 | index(EnteredDir,':')=1) then DO
say ""
say "The program has aborted."
say "You must enter an absolute pathname, like ""DH1:pics"","
say "or ""Work:graphics/framestores"", or ""SQ0:""."
say ""
say "Entering" '"'EnteredDir'"' "won't work."
say ""
say "Try clicking on the ""Volumes"" button in the requester,"
say "and then selecting the directory you want."
Call Exit_Routine
END
/* If there is not a slash or a colon at the end of the pathname, append a slash */
IF ~(RIGHT(EnteredDir,1)='/' | RIGHT(EnteredDir,1)=':'),
THEN EnteredDir=EnteredDir||'/'
RETURN
/*******************************************************************/
/* Happy trails, and I hope your picture conversion turned out OK. */
/*******************************************************************/
/* This is a line that has been commented out. */
Exit_Routine:
ADPRO_EXIT
address command 'wait 3 secs'
EXIT
return